﻿using System.IO;
using LitJson;
using Nomo.CoreModule;
using UnityEngine;

namespace Nomo.UnityCoreModule.Assets
{
    /// <summary>
    /// 资源管理器。
    /// </summary>
    public sealed class AssetManager : Singleton<AssetManager>
    {
        private AssetManager() { }

        /// <summary>
        /// 返回由存放于公共配置资源包里名为 <paramref name="key"/> 的文本资源文件转换而来的 <see cref="JsonData"/> 对象。
        /// </summary>
        /// <param name="key">文本资源文件名。</param>
        /// <returns>由存放于公共配置资源包里名为 <paramref name="key"/> 的文本资源文件转换而来的 <see cref="JsonData"/> 对象。</returns>
        public JsonData GetCommonJson(string key)
        {
            return Common.CommonJsonAssetBundle.TryLoadAsset<TextAsset>(key, out var textAsset) ? JsonMapper.ToObject(textAsset.text) : default;
        }

        /// <summary>
        /// 返回由存放于 <see cref="Application.persistentDataPath"/> 目录下名为 <paramref name="key"/> 的文本资源文件转换而来的 <see cref="JsonData"/> 对象。
        /// </summary>
        /// <param name="key">文本资源文件名（带扩展名）。</param>
        /// <returns>由存放于 <see cref="Application.persistentDataPath"/> 目录下名为 <paramref name="key"/> 的文本资源文件转换而来的 <see cref="JsonData"/> 对象。</returns>
        public JsonData GetJsonFromPersistentPath(string key)
        {
            var path = $"{Application.persistentDataPath}/{key}";

            try
            {
                return JsonMapper.ToObject(File.ReadAllText(path));
            }
            catch
            {
                return default;
            }
        }
    }
}
